import { useUserInfo } from '/@/stores/user-info'
import { setting } from '/@/views/csdev/hooks'

const stores = useUserInfo()

const isRoleAuth = (value: string) => {
  if (import.meta.env.VITE_MODE === 'development' && !setting.auth) {
    return true
  }
  return stores.userInfo.roles!.includes(value)
}

/**
 * @description 角色权限校验
 * @param value 权限值
 * @returns boolean
 * @example
 * 1. 值为字符串, 校验一个
 * 2. 值为数组, 数组内, 运算为或
 * 2.1 数组值为字符串 ['a', 'b'] a或b
 * 2.2 数组值为数组, 数组内, 运算为且 [['a', 'b'], 'c'] (a且b) 或 c
 */
export default function useRoleAuth(
  value: string | string[] | Array<string | string[]>
) {
  let returnValue = true
  switch (true) {
    case typeof value === 'string': {
      // 如果值是字符串, 直接校验
      return isRoleAuth(value)
    }
    case Array.isArray(value): {
      // 如果是数组
      for (const value0 of value) {
        switch (true) {
          case typeof value0 === 'string': {
            returnValue = isRoleAuth(value0)
            break
          }
          case Array.isArray(value0): {
            for (const value1 of value0) {
              returnValue = returnValue && isRoleAuth(value1)
            }
            break
          }
        }
        // 如果true, 返回, 否则继续运行
        if (returnValue) {
          return true
        }
      }
      break
    }
  }

  // 最终兜底返回false
  return false
}
